<script>
    // Object.defineProperty() 方法会直接在一个对象上定义一个新属性，或者修改一个对象的现有属性，并返回此对象。
    //传递给defineProperty函数有3个参数
    //第一个参数obj:要定义属性的对象
    //第二个参数prop：要定义或者修改的属性的名称
    //第三个参数descriptor：要定义或修改的属性描述符
    //前面2个参数没什么好说的，主要是第三个参数很有讲究，以前从来没看过，就只知道get，set

    let obj={name:'jd'}
    let o=Object.defineProperty(obj,'age',{
        value:18,//该属性对应的值
        enumerable:true,//该属性决定，当前这个age属性是否能出现在对象的枚举属性中,for...in Object.keys，注意是新增的属性，之前有的是会出现的
        writable:true,//该属性决定是否可以重新赋值改变属性值，注意：还是针对新增的属性
    })
    obj.age=200
    console.log(obj)
    console.log(obj == o)//true，说明是同一个内存地址，和proxy不一样，new Porxy返回的是一个代理对象
    for(let k in obj){
        console.log(k)
    }
    console.log(Object.keys(obj))
    
</script>